import axios from 'axios';
// import qs from 'qs';
import { Message } from 'element-ui';
export default Request = {
    domain: window.location.origin,
    /**
     * Axios 执行ajax请求
     * @param {object} params 执行请求的各参数
     * @param {function || undefined} cb 请求成功回调函数
     * @param {function || undefined} error 请求失败回调函数
     */
    Axios: function (params, cb, error) {

        const self = this;

        // 判断入参是否字符串 若为字符串 默认当作是请求的接口地址
        if (typeof arguments[0] == "string") {
            params = {
                api: arguments[0]
            };
        }

        let {
            api: _api = '',
            data: _data = {},
            method: _method = "GET",
            ignore: _ignore = false,
            returnAll: _returnAll = false,
        } = params;
        // 判断接口是否完整url,是的话无需处理
        if (!(/^http(s)?/).test(_api) && window.location.host != 'localhost:8080') {
            // 判断接口是否已经加上'/',未加上则使用join拼接起来
            _api = _api.indexOf("./") == 0 ? this.domain + _api.replace(".", "") : [this.domain, _api].join("/");
        }

        // 对入参数据进行qs处理,使其符合axios请求参数格式
        // _data = this.qsData(_data);

        // 根据_method执行post或get请求
        if (_method === "GET") {
            axios.get(_api, {
                params: _data
            }).then(function (res) {
                self.CallBack(res, _ignore, cb, _returnAll);
            }).catch(function (res) {
                error && typeof error == 'function' && error(res);
                Message({
                    message: '请求网络失败，请刷新页面',
                    type: 'error',
                    duration: 0
                });
                console.error(`${_api}请求异常！`);
            });
        } else if (_method === "POST") {
            // axios.defaults.headers.post['Content-Type'] = 'application/json;charset=utf-8';
            // _data = this.qsData(_data);
            axios.post(_api, _data).then(function (res) {

                self.CallBack(res, _ignore, cb);
            }).catch(function (res) {

                error && typeof error == 'function' && error(res);
                console.error(`${_api}请求异常！`);
            });
        } else {
            // 处理method入参非POST且非GET的情况
            console.error(`${_api}请求未传入method方法，请仔细检查调用函数！`);
        }
    },



    /**
     * qsData 使用qs.js格式化传参数据
     * @param {object} data 需要格式化的参数
     */
    // qsData: function (data) {
    //     let _data = data instanceof Array ? [] : {};
    //     for (let k in data) {
    //         if (data.hasOwnProperty(k)) {
    //             _data[k] = data[k];
    //         }
    //     }
    //     return qs.stringify(_data);
    // },

    /**
     * CallBack 请求回调的统一处理函数
     * @param {object} reponse 服务器返回数据
     * @param {boolean || undefined} ignore 是否忽略状态码
     * @param {function || undefined} cb 请求成功时的回调函数
     */
    CallBack: function (response, ignore = false, cb, returnAll = false) {
        // ignore为true,说明不做状态码判断处理,直接返回所有数据
        if (ignore) {
            cb && typeof cb == "function" && cb(response.data);
        } else {
            if (response.data.status == 200) {
                // 2：请求成功
                cb && typeof cb == "function" && cb(returnAll ? response.data : response.data.data);
            } else {
                Message({
                    message: '系统错误，请联系工作人员或业务对接人',
                    type: 'error'
                })
            }
        }
    },
    /**
     *
     * @param {object} params 包含如下数据 api:请求接口 data:请求参数 ignore:是否忽略接口返回状态码 returnAll:返回所有返回值
     * @param {function || undefined} cb 请求成功回调函数
     * @param {function || undefined} err 请求失败回调函数
     */
    GET: function (params, cb, err) {
        if (typeof arguments[0] == 'string') {
            params = {
                api: arguments[0]
            };
        }
        params.method = 'GET';
        // debugger
        // console.log("get的数据====>", params);
        return this.Axios(params, cb, err);
    },
    POST: function (params, cb, err) {
        if (typeof arguments[0] == 'string') {
            params = {
                api: arguments[0]
            };
        }
        params.method = 'POST';
        console.log("post的数据====>", params);
        return this.Axios(params, cb, err);
    }
};
window.axios = axios;
